package coreconcurrency.call;

import java.io.File;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 使用Callable和Future接口，Callable类似于Runable接口，但是不同之处是有返回值，Future对Callable进行了包装，获取最终结果。
 * 而FutureTask接口实现了这两个接口。
 * 这个程序以多线程的方式返回含有keyWord的文件的行数。
 */
public class FutureTest {
    private static File file = new File("//Users//yongli//project");
    private static String keyWord = "concurrent";

    public static void main(String[] args) {
        FutureTask<Integer> futureTask = new FutureTask<>(new MatchCounter(file, keyWord));
        Thread thread = new Thread(futureTask);
        thread.start();
        try {
            Integer counter = futureTask.get();
            System.out.println("the line number is :" + counter);

        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

}